home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG: World of Utilities / PC-SIG's World of Utilities (PC-SIG) (1994).iso / UTI / DISK1533.ZIP / HEAD.C < prev    next >
Text File  |  1989-02-22  |  2KB  |  68 lines

  1. #include <stdio.h>
  2. #include <local.h>
  3.  
  4. #define    LINSIZ    255    /* max bytes in 1 line  */
  5. #define DEFAULT    10    /* lines to use default */
  6.  
  7. /*
  8.  * HEAD.C - the head of a file, works like a filter if there are no
  9.  * files specified on the command line, the unix utility does not
  10.  * allow wildcards in the head and tail commands, so they are not
  11.  * supported, usage like: head {/n} {file file ... }
  12.  */
  13.  
  14. static    char *Program [] = { "S. Leoce, *nix(tm) head.c"
  15.                  "v1.0 r1.0 svclvl 1 va@psj" };
  16.  
  17. static    char *Usage = "usage: head [/hn#] [file file ...]";
  18.  
  19. #include "b:cmdline.c"
  20.  
  21. int main (argc, argv)
  22. char    *argv[];
  23. int     argc;
  24. {
  25.     short    unsigned LineOption = FALSE;
  26.     short    unsigned header     = FALSE;
  27.     long    register number = DEFAULT;    /* default lines to write */
  28.     FILE    *fp;                /* file stream pointer      */
  29.     char    line [LINSIZ];            /* input line          */
  30.  
  31.     opterr = FALSE;
  32.     while ((LineOption = getopt(argc, argv, "hn:")) != EOF)
  33.         switch(LineOption) {
  34.         case '?':
  35.             fprintf(stderr,"head: illegal option %c\n",badopt);
  36.             _exit (0x04);
  37.         case 'n':
  38.             number = max(atol(optarg),0);
  39.             break;
  40.         case 'h':
  41.             header = TRUE;
  42.         }    /* switch closed here */
  43.  
  44.     if (number == 0)
  45.         _exit(fprintf(stderr,"%s\n", Usage) + 0x04);
  46.  
  47.     if (argv[optind] == NULL)    /* use like a filter now      */
  48.         while(gets(line) != NULL && number-- > 0)
  49.             printf("%s\n",line);
  50.     else {                /* do each file              */
  51.         long save = number;
  52.         while (argv[optind] != NULL) {
  53.             putchar('\n');
  54.             if (header)
  55.                 printf("--------------- %s\n",argv[optind]);
  56.             number = save;
  57.             if ((fp = fopen(argv[optind++], "r")) == NULL)
  58.                 _exit(perror(strcat("head: can't open ",
  59.                     strupr(argv[optind-1]))) + 0x10);
  60.             number = save;
  61.             while(fgets(line, LINSIZ, fp) != NULL && number-- > 0)
  62.                 printf("%s", line);
  63.             fclose (fp);
  64.         }
  65.     }    /* else is closed */
  66.  
  67.     return (0);
  68. }